#掷硬币的连胜
#如果你掷硬币一百次，并在每次正面时写下“H”，在每次反面时写下“T”，就会创建一个看起来像“T T T T T H H H H T T ”这样的列表。
#编写一个程序，查找随机生成的正面和反面列表中连续出现6个正面或6个反面的频率。
#你的程序将实验分为两部分：第一部分生成随机选择的“正面”和“反面”值的列表，第二部分检查其中是否有连胜。
#将所有代码放入一个循环中，重复该实验10000次，这样我们就可以找出掷硬币中包含连续六个正面或反面的百分比
import random
numberOfStreaks = 0
for experiment in range(100):
    spam = []
    for i in range(100):
        spam.append(random.randint(0,1))
    count = 1
    for j in range(len(spam)-2):
        if spam[j] == spam[j+1]:
            count += 1
            if count == 6:
                numberOfStreaks += 1
                count = 1
        else:
            count = 1
print(numberOfStreaks)
print('Chance of streak:%s%%' %(numberOfStreaks/10000))


#CSDN
# import random
# numberOfStreaks = 0
# alist = [] # 创建一个列表用来放置硬币正反面的状态，用1和0表示
# for experimentNumber in range(10000):
#     a = random.randint(0, 1)
#     alist.append(a)
# # print(alist)
# target = 0 # 表格从0下标开始计算
# while target <= 9994: 
#     # 如果6个连续值全是1，目标数+1
#     if alist[target:target+6] == [1, 1, 1, 1, 1, 1]:
#         numberOfStreaks += 1
#         target += 6
#     # 如果6个连续值全是0，目标数+1
#     elif alist[target:target+6] == [0, 0, 0, 0, 0, 0]:
#         numberOfStreaks += 1
#         target += 6
#     # 以上都不是，下标向后移动一位
#     else:
#         target += 1
# print(f'Chance of streak: {(numberOfStreaks / 10000)}%')